package satk.beans.usuario;

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import satk.beans.interfaces.IntControlBeansEdit;
import satk.objetos.Usuario;

/**
 * <h3>EditInstitucionBeans.java</h3>
 * <div><em>Fecha de creación: 26/05/2011, 10:43:26 PM.</em></div>
 * <p></p>
 * @author Sergio Flores Genis <sf.cancun@gmail.com>
 */
@ManagedBean
@ViewScoped
public class EditUsuarioBeans
        implements IntControlBeansEdit<Usuario>, Serializable {

    private Usuario editUsuario = null;
    private Usuario oldUsuario = null;

    public EditUsuarioBeans() {
        this.editUsuario = new Usuario();
        this.oldUsuario = (Usuario) this.editUsuario.clon();
    }

    @Override
    public Usuario getEdit() {
        return editUsuario;
    }

    @Override
    public Usuario getOld() {
        return oldUsuario;
    }

    @Override
    public void startEdit(Usuario o) {
        cancelEdit();
        this.editUsuario = o;
        this.oldUsuario = (Usuario) o.clon();
    }

    @Override
    public void cancelEdit() {
        this.editUsuario = new Usuario();
        this.oldUsuario = (Usuario) this.editUsuario.clon();
    }

    @Override
    public String edit() {
        java.util.List<java.lang.Throwable> lista = editUsuario.valida();
        if (!lista.isEmpty()) {
            String summary = satk.tools.GeneralEx.excepcionListThrowable(lista);
            throw new javax.faces.validator.ValidatorException(new FacesMessage(summary));
        }
        try {
            new satk.database.ManagerUsuarios().update(this.oldUsuario, this.editUsuario);
        } catch (java.sql.SQLIntegrityConstraintViolationException ex) {
           Logger.getLogger(EditUsuarioBeans.class.getName()).log(Level.SEVERE,
                    "Usuario con el mismo nombre", ex);
            throw new javax.faces.event.AbortProcessingException(
                    "Ya existe un usuario con este nombre");
        } catch (java.sql.SQLException ex) {
            Logger.getLogger(EditUsuarioBeans.class.getName()).log(Level.SEVERE,
                    "Error al editar el usuario", ex);
            throw new javax.faces.event.AbortProcessingException(ex.getErrorCode() + ex.getMessage());
        }
        return null;
    }
}
